package 反射学习;

import po.Person;

import java.lang.reflect.Constructor;

public class 获取构造方法们 {
    public static void main(String[] args) throws Exception {
        Class personClass = Person.class;
        Constructor constructor = personClass.getConstructor(String.class, int.class);
        //因为用于区分构造方法的主要是靠传入的参数,所以这里我们传入String和int类型的数据
        System.out.println(constructor);

        //获取到的constructor对象主要是用来创建对象用的
        Object object = constructor.newInstance("张三", 18);
        System.out.println(object);
        //Person{Name='张三', age=18, a='null', b='null', c='null', d='null'},调用对应的Person的toString方法

        System.out.println("-----------------");
        //也可以使用空参的构造器
        Constructor constructor1 = personClass.getConstructor();
        Object o = constructor1.newInstance();
        //这样这里就不用传递参数了
        System.out.println(o);
        //Person{Name='null', age=0, a='null', b='null', c='null', d='null'}

        //为了简化这部分的操作,class里面也有个newInstance方法可以使用
        Object o1 = personClass.newInstance();
        System.out.println(o1);
        //用于调用空参的构造方法
        //Person{Name='null', age=0, a='null', b='null', c='null', d='null'}

        //constructor.setAccessible(true);
        //这里一样可以使用暴力破解的方法
    }
}
